﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Security.Cryptography;
using System.Text;
using DAO;

public class PaginaBase : System.Web.UI.Page
{
    public PaginaBase()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    public Pessoa UsuarioLogado
    {
        get
        {
            if (Session["usuarioLogado"] != null)
                return (Pessoa)Session["usuarioLogado"];
            else
                return null;
        }
        set { Session["usuarioLogado"] = value; }
    }


    public static string GetMD5Hash(string input)
    {
        MD5 md5Hasher = MD5.Create();

        byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));

        StringBuilder sBuilder = new StringBuilder();

        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }

        return sBuilder.ToString();
    }

    public void fazLogin(int eventoID, string email, string senha)
    {
        try
        {
            if (UsuarioLogado != null)
                UsuarioLogado = new Pessoa();

            PersistenciaContainer bco = new PersistenciaContainer();

            //string senhaCripto = GetMD5Hash(senha);
            string senhaCripto = senha;

            UsuarioLogado = (from a in bco.Pessoas where a.eventoID == eventoID && a.email == email && a.senha == senhaCripto select a).FirstOrDefault();

            if (UsuarioLogado != null)
            {
                Session["usuarioLogado"] = UsuarioLogado;
            }
            else
                throw new Exception("Dados inválidos!");
        }
        catch (Exception)
        {
            throw;
        }
    }

    public static Menu montaMenu(Menu navigationMenu, int papelID)
    {
        try
        {
            PersistenciaContainer bco = new PersistenciaContainer();

            //Recupera a lista das permissões de acordo com o papel do usuario logado
            List<Permissao> listagemPermissoes = (from a in bco.Permissaos where a.papelID == papelID select a).ToList();


            //Percorre a Lista de Permissões
            for (int i = 0; i < listagemPermissoes.Count; i++)
            {
                if (!listagemPermissoes[i].entidade.Contains("DashBoard"))
                {
                    // Raiz
                    navigationMenu.Items.Add(new MenuItem(listagemPermissoes[i].entidade, "", "", "", ""));

                    //Pesquisar
                    if (listagemPermissoes[i].pesquisar.Contains("S"))
                    {
                        var subItem = new MenuItem("Pesquisar", "", null, "Pesquisar/frm" + listagemPermissoes[i].entidade + ".aspx");
                        navigationMenu.Items[i].ChildItems.Add(subItem);
                    }

                    //Criar
                    if (listagemPermissoes[i].criar.Contains("S"))
                    {
                        var subItem = new MenuItem("Criar", "", null, "Criar/frm" + listagemPermissoes[i].entidade + ".aspx");
                        navigationMenu.Items[i].ChildItems.Add(subItem);
                    }
                }
                else
                {
                    //Pesquisar
                    if (listagemPermissoes[i].pesquisar.Contains("S"))
                    {
                        // Raiz
                        navigationMenu.Items.Add(new MenuItem(listagemPermissoes[i].entidade, "", "/Default.aspx", "", ""));
                    }
                }

            }

            return navigationMenu;
        }
        catch (Exception)
        {

            throw;
        }

    }

    public static bool verificaPermissaoPagina(string url, int eventoID, int papelID)
    {
        string[] pagina = url.Split('/');

        string entidade = pagina[pagina.Length - 1].Split('.')[0];
        entidade = entidade.Substring(3);

        Permissao permissao = PermissaoDAO.Selecionar(eventoID, papelID, entidade);


        if (pagina.Length == 4)
        {
            if (pagina[2].Contains("Criar"))
            {
                if (permissao.criar.Contains("N"))
                    return false;
            }

            if (pagina[2].Contains("Deletar"))
            {
                if (permissao.deletar.Contains("N"))
                    return false;
            }

            if (pagina[2].Contains("Editar"))
            {
                if (permissao.editar.Contains("N"))
                    return false;

            }
        }
        return true;
    }

    public static DateTime GetDate_doBanco()
    {
        var bco = new PersistenciaContainer();
        return bco.ExecuteStoreQuery<DateTime>("SELECT NOW()").First();
    }
}